home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Technology Seed / Mac Tech Seed Feb '97.toast / OpenDoc 1.2b2c1 / TestParts / Clock / ClkPrpAc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-01  |  7.5 KB  |  312 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        ClkPrpAc.cpp
  3.  
  4.     Contains:    Implemementation of ClockPropAccessor class.
  5.  
  6.     Owned by:    Jon Pugh
  7.  
  8.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <2>     6/15/95    TJ        Added Includes for compiling with out PCH
  13.          <1>     6/13/95    JP        first checked in
  14.  
  15.     To Do:
  16. */
  17.  
  18. #ifndef _CLKPRPAC_
  19. #include "ClkPrpAc.h"
  20. #endif
  21.  
  22. #ifndef __APPLEEVENTS_
  23. #include <AppleEvents.h>
  24. #endif
  25.  
  26. #ifndef __AEREGISTRY__
  27. #include <AERegistry.h>
  28. #endif
  29.  
  30. #ifndef __ASREGISTRY__
  31. #include <ASRegistry.h>
  32. #endif
  33.  
  34. #ifndef _CLOCKPRT_
  35. #include "ClockPrt.h"
  36. #endif
  37.  
  38. #ifndef _CLOCKDEF_
  39. #include "ClockDef.h"
  40. #endif
  41.  
  42. #ifndef _CLOCKGBL_
  43. #include "ClockGbl.h"
  44. #endif
  45.  
  46. #ifndef _ODDEBUG_
  47. #include "ODDebug.h"
  48. #endif
  49.  
  50. #ifndef _EXCEPT_
  51. #include "Except.h"
  52. #endif
  53.  
  54. #ifndef __TEXTUTILS__
  55. #include <TextUtils.h>
  56. #endif
  57.  
  58.  
  59. #pragma segment ClkPrpAc
  60.  
  61. //==============================================================================
  62. // Constants
  63. //==============================================================================
  64.  
  65. //==============================================================================
  66. // Scalar Types
  67. //==============================================================================
  68.  
  69. //==============================================================================
  70. // Local Classes
  71. //==============================================================================
  72.  
  73. //==============================================================================
  74. // Global Variables
  75. //==============================================================================
  76.  
  77. //==============================================================================
  78. // Function Prototype
  79. //==============================================================================
  80.  
  81. //==============================================================================
  82. // ClockPropAccessor
  83. //==============================================================================
  84.  
  85. //------------------------------------------------------------------------------
  86. // ClockPropAccessor::ClockPropAccessor
  87. //------------------------------------------------------------------------------
  88.  
  89. ClockPropAccessor::ClockPropAccessor(DescType property, ClockPart* clock)
  90. {
  91.     fProperty = property;
  92.     fClock = clock;
  93. }
  94.  
  95.  
  96. //------------------------------------------------------------------------------
  97. // ClockPropAccessor::SetData
  98. //------------------------------------------------------------------------------
  99.  
  100. void ClockPropAccessor::SetData(AEDesc* data)
  101. {
  102.     Environment*    ev = somGetGlobalEnvironment();
  103.  
  104.     switch(fProperty)
  105.     {
  106.         case pFont:
  107.         {
  108.             ODPlatformMenu    fontMenu;
  109.             AEDesc            textDesc;
  110.             ODSShort        fontNum = fClock->GetFont();
  111.             Str255            fontName = "\p";
  112.  
  113.             fontMenu = fClock->GetMenuBar()->GetMenu(ev, kClock_FontMenuID);
  114.             GetFontName(fontNum, fontName );
  115.             CheckMarkMenu(fontMenu, fontName, kODFalse );
  116.  
  117.             THROW_IF_ERROR( AECoerceDesc(data, typeChar, &textDesc) );
  118.  
  119.             fontName[0] = GetHandleSize(textDesc.dataHandle);
  120.             BlockMoveData(*textDesc.dataHandle, &fontName[1], fontName[0]);
  121.             CheckMarkMenu(fontMenu, fontName , kODTrue );
  122.             fClock->OutlineSizeMenu(ev);
  123.             GetFNum( fontName, &fontNum );
  124.             fClock->SetFont(ev, fontNum );
  125.             fClock->AdjustDisplayFrames(ev);
  126.             THROW_IF_ERROR( AEDisposeDesc(&textDesc) );
  127.             break;
  128.         }
  129.  
  130.         case pPointSize:
  131.         {
  132.             ODPlatformMenu    sizeMenu;
  133.             AEDesc            numDesc;
  134.             ODULong            fontSize;
  135.             Str255            sizeStr;
  136.  
  137.             sizeMenu = fClock->GetMenuBar()->GetMenu(ev, kClock_SizeMenuID);
  138.     
  139.             fontSize = fClock->GetSize();
  140.             NumToString( fontSize, sizeStr );
  141.             CheckMarkMenu(sizeMenu, sizeStr, kODFalse );
  142.  
  143.             THROW_IF_ERROR( AECoerceDesc(data, typeInteger, &numDesc) );
  144.             
  145.             fontSize = **(ODULong**)numDesc.dataHandle;
  146.             fClock->SetFontSize(ev, (ODSShort) fontSize );
  147.             NumToString(fontSize, sizeStr );
  148.             CheckMarkMenu(sizeMenu, sizeStr, kODTrue );
  149.             //fClock->OutlineSizeMenu(ev);
  150.             fClock->AdjustDisplayFrames(ev);
  151.             THROW_IF_ERROR( AEDisposeDesc(&numDesc) );
  152.             break;
  153.         }
  154.  
  155.         case pTextStyles:
  156.         {
  157.             ODPlatformMenu    styleMenu;
  158.             DescType        fontStyle;
  159.             ODUByte            style;
  160.             Str255            styleStr;
  161.             
  162.             styleMenu = fClock->GetMenuBar()->GetMenu(ev, kClock_StyleMenuID);
  163.             
  164.             style = fClock->GetStyle();
  165.             StyleToString(style, &styleStr);
  166.             CheckMarkMenu(styleMenu, styleStr, kODFalse );
  167.             
  168.             fontStyle = **(DescType**)data->dataHandle;
  169.             switch (fontStyle) 
  170.             {
  171.                 case kAEPlain:        style = normal; break;
  172.                 case kAEBold:        style = bold; break;
  173.                 case kAEItalic:        style = italic; break;
  174.                 case kAEUnderline:    style = underline; break;
  175.                 case kAEOutline:    style = outline; break;
  176.                 case kAEShadow:        style = shadow; break;
  177.                 case kAECondensed:    style = condense; break;
  178.                 case kAEExpanded:    style = extend; break;
  179.                 default:
  180.                     THROW(paramErr);
  181.             }
  182.             fClock->SetFontStyle(ev, style);
  183.             StyleToString(style, &styleStr);
  184.             CheckMarkMenu(styleMenu, styleStr, kODTrue );
  185.             fClock->AdjustDisplayFrames(ev);
  186.             break;
  187.         }
  188.  
  189.         case pDisplayMode:
  190.         {
  191.             DescType        theMode;
  192.             ODBoolean        isAnalog;
  193.             
  194.             theMode = **(DescType**)data->dataHandle;
  195.             switch (theMode) 
  196.             {
  197.                 case kAEAnalogClock:        isAnalog = kODTrue; break;
  198.                 case kAEDigitalClock:        isAnalog = kODFalse; break;
  199.                 default:
  200.                     THROW(paramErr);
  201.             }
  202.             fClock->SetAnalog(ev, isAnalog);
  203.             fClock->AdjustDisplayFrames(ev);
  204.             fClock->AdjustDialogs(ev);
  205.             break;
  206.         }
  207.         
  208.         case pASTime:
  209.         {
  210.             ODULong*    time;
  211.             AEDesc        dateDesc;
  212.             
  213.             THROW_IF_ERROR( AECoerceDesc(data, cLongDateTime, &dateDesc) );
  214.             
  215.             time = (ODULong*) *dateDesc.dataHandle;
  216.             SetDateTime(*(++time));
  217.             fClock->AdjustDisplayFrames(ev);
  218.             THROW_IF_ERROR( AEDisposeDesc(&dateDesc) );
  219.             break;
  220.         }
  221.         default:
  222.             THROW(errAENotModifiable);
  223.             break;
  224.     }
  225. }    // ClockPropAccessor::SetData
  226.  
  227.  
  228. //------------------------------------------------------------------------------
  229. // ClockPropAccessor::GetData
  230. //------------------------------------------------------------------------------
  231.  
  232. void ClockPropAccessor::GetData(AEDesc* objectData)
  233. {
  234.     ODError            result;
  235.     
  236.     switch(fProperty)
  237.     {
  238.         case pFont:
  239.         {
  240.             ODSShort    font = fClock->GetFont();
  241.             Str255        name = "\p";
  242.  
  243.             GetFontName(font, name);
  244.             THROW_IF_ERROR(AECreateDesc(typeChar, (Ptr)&name[1], name[0],
  245.                     objectData));
  246.             break;
  247.         }
  248.  
  249.         case pPointSize:
  250.         {
  251.             ODSShort    fontSize = fClock->GetSize();
  252.             result = AECreateDesc(typeShortInteger, (Ptr)&fontSize, sizeof(fontSize),
  253.                     objectData);
  254.             THROW_IF_ERROR(result);
  255.         }
  256.             break;
  257.  
  258.         case pTextStyles:
  259.         {
  260.             DescType    fontStyle;
  261.             ODUByte        style = fClock->GetStyle();
  262.             switch (style) 
  263.             {
  264.                 case normal:    fontStyle = kAEPlain; break;
  265.                 case bold:        fontStyle = kAEBold; break;
  266.                 case italic:    fontStyle = kAEItalic; break;
  267.                 case underline:    fontStyle = kAEUnderline; break;
  268.                 case outline:    fontStyle = kAEOutline; break;
  269.                 case shadow:    fontStyle = kAEShadow; break;
  270.                 case condense:    fontStyle = kAECondensed; break;
  271.                 case extend:    fontStyle = kAEExpanded; break;
  272.                 default:
  273.                     THROW(paramErr);
  274.             }
  275.             result = AECreateDesc(typeEnumerated, (Ptr) &fontStyle, sizeof(fontStyle), 
  276.                     objectData);
  277.             THROW_IF_ERROR(result);
  278.             break;
  279.         }
  280.  
  281.         case pDisplayMode:
  282.         {
  283.             DescType    theMode = kAEDigitalClock;
  284.             
  285.             if (fClock->IsAnalog())
  286.                 theMode = kAEAnalogClock;
  287.             result = AECreateDesc(typeEnumerated, (Ptr) &theMode, sizeof(theMode), 
  288.                     objectData);
  289.             THROW_IF_ERROR(result);
  290.             break;
  291.         }
  292.         
  293.         case pASTime:
  294.         {
  295.             ODULong        time[2];
  296.             
  297.             time[0] = 0;
  298.             GetDateTime(&time[1]);
  299.             result = AECreateDesc(cLongDateTime, (Ptr) &time, sizeof(time), objectData);
  300.             THROW_IF_ERROR(result);
  301.             break;
  302.         }
  303.         
  304.         default:
  305.             THROW(errAENoSuchObject);
  306.             break;
  307.     }
  308. }    // ClockPropAccessor::GetData
  309.  
  310.  
  311.  
  312.